package gui;

import java.awt.Image;
import java.util.Date;

public class Produto implements ProdutoInterface, Comparable<Produto>{

	private int id;

	private int quantidadeCarrinho;
	
	private int quantidadeEstoque;

	private String descricao;

	private String nome;

	private Valor valor;

	private String fabricante;

	private Image imagem;

	private Date dataDeFabricacao;

	public Produto(int quantidadeEstoque, double valorCompra, String nome,
			String fabricante, Date dataDeFabricacao) {
		this.quantidadeEstoque = quantidadeEstoque;
		this.quantidadeCarrinho = quantidadeEstoque;
		descricao = null;
		this.nome = nome;
		valor = new Valor(0, valorCompra);
		this.fabricante = fabricante;
		imagem = null;
		this.dataDeFabricacao = dataDeFabricacao;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Image getImagem() {
		return imagem;
	}

	public void setImagem(Image imagem) {
		this.imagem = imagem;
	}

	public int getQuantidadeEstoque() {
		return quantidadeEstoque;
	}
	
	public int getQuantidadeCarrinho() {
		return quantidadeCarrinho;
	}
	
	public double getValorVenda() {
		return valor.getValorVenda();
	}
	
	public double getValorCompra() {
		return valor.getValorCompra();
	}

	protected void setValor(double valorVenda) {
		valor.setValorVenda(valorVenda);
	}

	public Date getDataDeFabricacao() {
		return dataDeFabricacao;
	}

	public String getFabricante() {
		return fabricante;
	}

	public int getId() {
		return id;
	}

	public String getNome() {
		return nome;
	}

	@Override
	public int hashCode() {
		final int PRIME = 31;
		int result = 1;
		result = PRIME * result + ((dataDeFabricacao == null) ? 0 : dataDeFabricacao.hashCode());
		result = PRIME * result + ((descricao == null) ? 0 : descricao.hashCode());
		result = PRIME * result + ((fabricante == null) ? 0 : fabricante.hashCode());
		result = PRIME * result + id;
		result = PRIME * result + ((nome == null) ? 0 : nome.hashCode());
		result = PRIME * result + quantidadeCarrinho;
		result = PRIME * result + quantidadeEstoque;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Produto other = (Produto) obj;
		if (dataDeFabricacao == null) {
			if (other.dataDeFabricacao != null)
				return false;
		} else if (!dataDeFabricacao.equals(other.dataDeFabricacao))
			return false;
		if (descricao == null) {
			if (other.descricao != null)
				return false;
		} else if (!descricao.equals(other.descricao))
			return false;
		if (fabricante == null) {
			if (other.fabricante != null)
				return false;
		} else if (!fabricante.equals(other.fabricante))
			return false;
		if (id != other.id)
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (quantidadeCarrinho != other.quantidadeCarrinho)
			return false;
		if (quantidadeEstoque != other.quantidadeEstoque)
			return false;
		return true;
	}

	public String toString() {
		return nome + " - " + id;
	}

	protected void retiraQuantidadeEstoque(int i) {
		quantidadeEstoque -= i;
	}

	protected void adicionaQuantidadeEstoque(int i) {
		quantidadeEstoque += i;
	}
	
	protected void retiraQuantidadeCarrinho(int i) {
		quantidadeCarrinho -= i;
	}

	protected void adicionaQuantidadeCarrinho(int i) {
		quantidadeCarrinho += i;
	}

	public static Produto getProduto(int id) {
		//pegar produto do banco
		return null;
	}
	
	public static Produto getProduto(String nome) {
		//pegar produto do banco
		return null;
	}
	
	protected static void adicionaProduto(){
		//usar o idvalido e adicionar 1 para ele
		//usar os outros dados e escrever no banco o cliente
	}
	public int compareTo(Produto o) {
		return this.getNome().compareToIgnoreCase(o.getNome());
	}
	
	public void setValorVenda(Double d){
		this.valor.setValorVenda(d);
	}


}
